﻿using BLevy.Entidad;
using BLevy.Negocio;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace BLevy.UI
{
    public partial class frmServiciosSolicitud : Form
    {
        private int socio_id { get; set; }
        public frmServiciosSolicitud( int id)
        {
            socio_id = id;
            InitializeComponent();
        }


        private void button1_Click(object sender, EventArgs e)
        {
            frmSociosSelector frm = new frmSociosSelector();
            DialogResult result = frm.ShowDialog();
            if(result == System.Windows.Forms.DialogResult.OK)
            {
                txtNroSocio.Text = String.Format("{0:00000000}", frm.socio_id);
            }
        }

        private void InhabilitarControles()
        {
            txtNroSocio.Enabled = false;
        }

        private Boolean ValidarForm()
        {
            bool resultado = true;
            error.Clear();
            
            if(string.IsNullOrEmpty(txtObservaciones.Text))
            {
              
                txtObservaciones.Text =  "NO INFORMA.";
            }

            if(string.IsNullOrEmpty(txtDireccionDestino.Text))
            {
                txtDireccionDestino.Text = "NO INFORMA";
               
            }

            if(string.IsNullOrEmpty(txtDireccionSalida.Text))
            {
                txtDireccionSalida.Text = "NO INFORMA";
            }

            if(ckbAfiliados.CheckedItems.Count == 0)
            {
                resultado = false;
                error.SetError(ckbAfiliados, "Debe seleccionar un beneficiario.");
                return resultado;
            }

            if (ckbAfiliados.CheckedItems.Count > 1)
            {
                resultado = false;
                error.SetError(ckbAfiliados, "Debe seleccionar un solo beneficiario.");
                return resultado;
            }

            if(string.IsNullOrEmpty( txtMedico.Text))
            {
                txtMedico.Text = "NO INFORMA";
            }

            return resultado;
        }

        private void txtNroSocio_TextChanged(object sender, EventArgs e)
        {
            //if(!string.IsNullOrEmpty(txtNroSocio.Text))
            //{
            //    FindSocioById(Convert.ToInt32(txtNroSocio.Text));
            //}
        }

        private void IniciarControles()
        {
            txtObservaciones.Text = string.Empty;
            txtNroSocio.Text = string.Empty;
            txtDireccionDestino.Text = string.Empty;
            txtDireccionSalida.Text = string.Empty;
            txtMedico.Text = string.Empty;

            this.ActiveControl = txtObservaciones;
        }

        

        private void FindSocioById(int socio)
        {
            try
            {
                Socio _socio = Negocio.Socios.FindById(socio_id);

                txtNroSocio.Text = _socio.numero_certificado.ToString();
                _socio.adherentes = Adherentes.FindByIdSocio(socio_id);

                ckbAfiliados.Items.Clear();
                ckbAfiliados.Items.Add(_socio.apellido + ", " + _socio.nombres);

                foreach (var fila in _socio.adherentes)
                {
                    ckbAfiliados.Items.Add(fila.apellido + ", " + fila.nombres);
                }

                if (_socio.activo == 0)
                {
                    txtObservaciones.Enabled = false;
                    MessageBox.Show("El Grupo Familiar no puede recibir Servicios.", "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    LimpiarControles();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void LimpiarControles()
        {       
            txtNroSocio.Text = string.Empty;
            txtObservaciones.Text = string.Empty;
            txtDireccionSalida.Text = string.Empty;
            txtDireccionDestino.Text = string.Empty;
            ckbAfiliados.Items.Clear();
            txtMedico.Text = string.Empty;
        }

        private void frmServiciosSolicitud_Load(object sender, EventArgs e)
        {
            IniciarControles();
            InhabilitarControles();
            GetServicios();
            FindSocioById(socio_id);
        }

        private void btnSalir_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void GetServicios()
        {
            try
            {
                cmbServicio.DisplayMember = "servicio";
                cmbServicio.ValueMember = "id";
                cmbServicio.DataSource = Servicios.FindAll();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            if(ValidarForm() == true)
            {
                RegistrarServicio();
            }
        }

        private void RegistrarServicio()
        {
            try
            {
                ServicioSocio servicio = new ServicioSocio();
                servicio.socio_id = socio_id;
                servicio.fecha = dtpFecha.Value;

                //recorro el ckeckboxlist para obtener el beneficiario
                for (int i = 0; i < ckbAfiliados.Items.Count; i++)
                {
                    if (ckbAfiliados.GetItemChecked(i))
                    {
                        servicio.beneficiario = (string)ckbAfiliados.Items[i];
                    }

                }

                servicio.direccion_destino = txtDireccionDestino.Text;
                servicio.direccion_salida = txtDireccionSalida.Text;
                servicio.observaciones = txtObservaciones.Text;
                servicio.servicio_id = Convert.ToInt32(cmbServicio.SelectedValue);
                servicio.medico = txtMedico.Text;
                servicio.activo = 1;

                int solicitud_id = Servicios.SolicitudServicio(servicio);
                if (solicitud_id > 0)
                {
                    MessageBox.Show("Los datos se registraron correctamente.", "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    LimpiarControles();

                    DialogResult dialog = MessageBox.Show("Desea imprimir el comprobante de la solicitud?", "Información", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                    if (dialog == System.Windows.Forms.DialogResult.Yes)
                    {
                        frmServiciosSolicitudReporte frm = new frmServiciosSolicitudReporte(solicitud_id);
                        frm.MdiParent = this.MdiParent;
                        frm.Show();
                    }
                }
                else
                {
                    MessageBox.Show("Ocurrio un error al registrar los datos. Intente Nuevamente.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void ckbAfiliados_ItemCheck(object sender, ItemCheckEventArgs e)
        {
            if (e.NewValue == CheckState.Checked)
                for (int i = 0; i < ckbAfiliados.Items.Count; ++i)
                    if (e.Index != i) ckbAfiliados.SetItemChecked(i, false);
        }

    }
}
